package com.dc.java8._3_stream;

import org.junit.Test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;

/**
 * 一、Stream API 的操作步骤：
 * 	   *1. 创建 Stream
 * 		2. 中间操作
 * 		3. 终止操作(终端操作)
 */
public class StreamTest1 {

	/**
	 *  创建 Stream
	 */
	@Test
	public void test1() {
		//1. Collection 提供了两个方法  _3_stream() 与 parallelStream()
		List<String> list = new ArrayList<>();
		// 获取一个串行流
		Stream<String> s1 = list.stream();		
		// 获取一个并行流
		Stream<String> parallelStream = list.parallelStream();


		//2. 通过 Arrays 中的 _3_stream() 获取一个数组流
		Integer[] ints = new Integer[10];
		Stream<Integer> s2 = Arrays.stream(ints);
		
		//3. 通过 Stream 类中静态方法 of()
		Stream<Integer> s3 = Stream.of(ints);
		Stream<Integer> s4 = Stream.of(1, 2, 3);
		
		//4 创建无限流(迭代)
		Stream<Integer> s5 = Stream.iterate(0, x -> x+2).limit(10);
		
		//5 无限流(生产)
		Stream<Double> s6 = Stream.generate(Math::random).limit(2);
	}


	/**
	 * 并行流和串行流转换
	 */
	@Test
	public void test2(){
		Stream<Integer> stream = Stream.of(1, 2, 3);
		// 转换为并行流
		Stream<Integer> parallelStream = stream.parallel();
		// 转换为串行流
		Stream<Integer> sequentialStream = parallelStream.sequential();
	}

}
